#！/usr/bin/python 
# -*- coding:utf-8 -*-  
# @Time: 2019/5/17 20:45   
# @Author: Envy   
# @File: form.py

# from django import forms
# from index.models import Product,Type
# from django.core.exceptions import ValidationError
#
#
# # 自定义数据验证函数
# def weight_validate(value):
#     if not str(value).isdigit():  # 如果值不是数字
#         raise ValidationError('请输入正确的重量')
#
#
# # 设置错误信息并设置样式
# class ProductForm(forms.Form):
#     name = forms.CharField(max_length=20, label='名字', widget=forms.widgets.TextInput(attrs={'class': 'cl'})
#                         , error_messages={'required': '名字不能为空'})
#     weight = forms.CharField(max_length=50, label='重量', validators=[weight_validate])  # 使用自定义数据验证函数
#     size = forms.CharField(max_length=50, label='尺寸')
#     # 设置下拉框的值
#     choices_list = [(i+1, v['type_name']) for i, v in enumerate(Type.objects.values('type_name'))]   # 获取数据库数据
#     type = forms.ChoiceField(widget=forms.widgets.Select(attrs={'class': 'cl', 'size': '4'}), choices=choices_list, label= '产品类型')  # 设置css样式
#
#
# # 数据表单，使用ModelForm
# class ProductModelForm(forms.ModelForm):
#     # 添加模型以外的表单字段
#     productId = forms.CharField(max_length=20, label= '产品序号')
#
#
#     # 模型与表单设置
#     class Meta:
#         # 绑定模型
#         model = Product
#         # fields属性用于设置转换字段，'__all__'是将全部模型字段转换成表单字段
#         # fields = '__all__'
#         fields = ['name', 'weight', 'size', 'type']
#         # 用于设置禁止模型字段转换成表单字段
#         exclude = []
#         # labels用于设置HTML元素控件的label标签
#         labels = {
#             'name': '产品名称',
#             'weight': '重量',
#             'size': '尺寸',
#             'type': '产品类型'
#         }
#         # 定义widgets设置表单字段的CSS样式
#         widgets = {
#             'name': forms.widgets.TextInput(attrs={'class': 'cl'}),
#         }
#         # 定义字段的类型，一般情况下模型的字段会自动转换成表单字段
#         field_classes = {
#             'name': forms.CharField
#         }
#         # 帮助提示信息
#         help_texts = {
#             'name' : ''
#         }
#         # 自定义错误信息
#         error_messages = {
#             # '__all__'设置全部错误信息
#             '__all__' : {
#                 'required': '请输入内容',
#                 'invalid': '请检查输入内容',
#             },
#
#             # 设置某个字段的错误信息
#             'weight' : {
#                 'required': '请输入重量的数值',
#                 'invalid': '请检查数值是否正确',
#             }
#         }
#
#     # 自定义表单字段weight的数据清洗，注意必须是“clean_字段名”的方式，且有返回值
#     def clean_weight(self):
#         # 获取字段weight的值
#         data = self.cleaned_data['weight']
#         return data + 'g'


# # 数据表单，使用ModelForm
# class ProductModelForm(forms.ModelForm):
#     # 方法四：重写ProductModelForm类的初始函数__init__
#     def __init__(self,*args,**kwargs):
#         super(ProductModelForm,self).__init__(*args,**kwargs)
#
#         # 设置下拉框的值
#         type_obj = Type.objects.values('type_name')
#         choices_list = [(i + 1, v['type_name']) for i, v in enumerate(type_obj)]  # 获取数据库数据
#         self.fields['type'].choices = choices_list
#
#         self.fields['name'].initial = '我的手机'
#         # 方法三：定义表单时，设置参数initial
#         productId = forms.CharField(max_length=20, label= '产品序号',initial='No1')
